package com.huahang.fashionpress.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.huahang.fashionpress.config.ParamConfig;
import com.huahang.fashionpress.enums.ExceptionEnum;
import com.huahang.fashionpress.exception.ResultException;
import com.huahang.fashionpress.form.FormImg;
import com.huahang.fashionpress.mapper.ImgMapper;
import com.huahang.fashionpress.model.Img;
import com.huahang.fashionpress.service.ImgService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: 阿俊哥
 * @Date: 2019/8/23 16:48
 * @Version 1.0
 */
@Service
@Slf4j
public class ImgServiceImpl implements ImgService {

    @Resource
    ImgMapper imgMapper;
    @Resource
    ParamConfig paramConfig;
    //给默认的主展示照片赴初值
    public static final int IMG_STATUS=1;
    @Override
    public List<String> selectImgList(String productId) {
        if(productId==null||productId==""){
            log.info("【后台商品管理】查询图片列表商品编号出错");
            throw  new ResultException(ExceptionEnum.DATA_ERROR);
        }
        QueryWrapper<Img> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("product_id", productId);
        queryWrapper.eq("img_status", IMG_STATUS);
        List<Img> imgs = new ArrayList<>();
        imgs= imgMapper.selectList(queryWrapper);
        if(imgs.size()==0){
            log.info("【后台商品管理】查询图片列表暂无");
            //使用默认的图片
           Img img = new Img();
           img.setImgName(paramConfig.getImgUrl());
           imgs.add(img);
        }
        return imgs.stream().map(e->e.getImgName()).collect(Collectors.toList());

    }

    //查找所有图片
    public List<FormImg> SelectAllImg() {
        List<FormImg> imgList = imgMapper.SelectAllImgs();
        return imgList;
    }
    //根据图片Id查图片信息
    @Override
    public Img SelectImgByimg_id(int img_id) {
        if("0".equals(String.valueOf(img_id)) || "null".equals(String.valueOf(img_id)) || img_id < 0){
            log.info("【图片管理】：查询图片ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }

        return imgMapper.SelectImgByimg_id(img_id);
    }
    //查找某个商品的所有图片
    @Override
    public List<Img> SelectImgsByproduct_id(String product_id) {
        if(product_id==null||product_id==""){
            log.info("【图片管理】：查询商品ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }

        return imgMapper.SelectImgByproduct_id(product_id);
    }

    @Override
    public FormImg SelectFImgByimg_id(int img_id) {
        if("0".equals(String.valueOf(img_id)) || "null".equals(String.valueOf(img_id)) || img_id < 0){
            log.info("【图片管理】：查询图片ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }

        return imgMapper.SelectFImgByimg_id(img_id);
    }

    @Override
    public List<FormImg> SelectFImgByproduct_id(String product_id) {
        if(product_id==null||product_id==""){
            log.info("【图片管理】：查询图片ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        return imgMapper.SelectFImgByproduct_id(product_id);
    }

    @Override
    public List<String> SelectAllproductId() {
        return imgMapper.SelectAllproductId();
    }

    //添加图片信息，状态为1并且数据库中有展示图片，则不能插入
    @Override
    public void addImg(Img img) {
        if(img == null){
            log.info("【图片管理】：添加图片信息为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        List<Img> imgList =imgMapper.SelectImgByproduct_id(img.getProductId());
        if(img.getImgStatus() == 1){
            for (Img img1:imgList) {
                if(img1.getImgStatus() == 1){
                    log.info("【图片管理】：存在展示图片，不能添加");
                    throw new ResultException(ExceptionEnum.RE_ERROR);
                }
            }
        }
        imgMapper.insert(img);
    }
    //删除某个商品的所有图片
    @Override
    public void deleteImgsByProduct_id(String product_id) {
        if(product_id==null||product_id==""){
            log.info("【图片管理】：删除商品ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        imgMapper.deleteimgsByproduct_id(product_id);
    }
    //根据图片ID删除商品，商品为展示图片则不能删
    @Override
    public void deleteImgByimg_id(int img_id,String product_id) {
        if("0".equals(String.valueOf(img_id)) || "null".equals(String.valueOf(img_id)) || img_id < 0){
            log.info("【图片管理】：删除图片ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        if(product_id==null||product_id==""){
            log.info("【图片管理】：删除商品ID为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        Img img = imgMapper.SelectImgByimg_id(img_id);
        List<Img> imgList = imgMapper.SelectImgByproduct_id(product_id);
        if(img.getImgStatus() == 1){
            for (Img img1:imgList) {
                if(img1.getImgStatus() == 0){
                    img1.setImgStatus(1);
                    this.updateImgStatus(img1);
                    break;
                }
            }
        }
        imgMapper.deleteImgByimg_id(img_id);
    }

    @Override
    public void updateImg(Img img) {
        if(img == null){
            log.info("【图片管理】：图片信息为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        imgMapper.updateById(img);
    }

    //把当前展示图片设为详情图片，把需要更新的图片设置为展示图片
    @Override
    public void updateImgStatus(Img img) {
        if(img == null){
            log.info("【图片管理】：图片信息为空");
            throw new ResultException(ExceptionEnum.PARAM_ERROR);
        }
        List<Img> imgList =  this.SelectImgsByproduct_id(img.getProductId());
        for(Img img1:imgList){
            if(img1.getImgStatus() == 1){
                img1.setImgStatus(0);
                this.updateImg(img1);
            }
        }
        img.setImgStatus(1);
        this.updateImg(img);
    }
}
